package day21;

/**
 * 工厂类实例
 * 1. 创建接口，设置需要实现的方法
 * 2. 创建不同的子类，实现接口及其方法
 * 3. 创建工厂类接口
 * 4. 创建工厂类子类，并返回对应的子类对象
 * 5. 创建工厂类子类对象，调用对象子类的方法
 * 
 * 优点：当产生了新的对象时，不用去更改以前的代码，直接扩展就行
 * 
 * @author: yyfei  
 * @email:  yyfei123@qq.com
 */
public class FactoryModles {
	public static void main(String[] args) {
		Cars car1=new BenChiCar().getCar();
		car1.run();
		
		Cars car2=new BaMaCar().getCar();
		car2.stop();
		
	}
}

interface Cars{
	/**
	 * 车子能跑
	 * @author: yyfei
	 * @email:  yyfei123@qq.com
	 */
	public abstract void run();
	
	/**
	 * 车子能停
	 * @author: yyfei
	 * @email:  yyfei123@qq.com
	 */
	public abstract void stop();
	
}

class BenChi implements Cars{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("奔驰正在飞速行驶中");
	}
	 
	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("奔驰正在刹车中");
	}
}

class BaMas implements Cars{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("宝马车正在满满行驶");
	}
	public void stop() {
		System.out.println("宝马车正在停车");
	};
}

interface Factorys{
	public abstract Cars getCar();
}

class BenChiCar implements Factorys{
	@Override
	public Cars getCar() {
		// TODO Auto-generated method stub
		return new BenChi();
	}
}

class BaMaCar implements Factorys{
	@Override
	public Cars getCar() {
		// TODO Auto-generated method stub
		return new BaMas(); 
	}
}



